aboutsummaryrefslogtreecommitdiff
path: root/pages/anime/watch/[...info].js
diff options
context:
space:
mode:
authorFactiven <[email protected]>2023-04-17 13:33:37 +0700
committerFactiven <[email protected]>2023-04-17 13:33:37 +0700
commit545d8a3473823f0a86cad3c177dbbb4ebb794a75 (patch)
tree1606111911ea31c8fd8f9560dade41f5fedd6520 /pages/anime/watch/[...info].js
parentUpdate 7th (diff)
downloadmoopa-545d8a3473823f0a86cad3c177dbbb4ebb794a75.tar.xz
moopa-545d8a3473823f0a86cad3c177dbbb4ebb794a75.zip
Snapshot Moopa v3.2
Diffstat (limited to 'pages/anime/watch/[...info].js')
-rw-r--r--pages/anime/watch/[...info].js76
1 files changed, 59 insertions, 17 deletions
diff --git a/pages/anime/watch/[...info].js b/pages/anime/watch/[...info].js
index 552102c..756e0c1 100644
--- a/pages/anime/watch/[...info].js
+++ b/pages/anime/watch/[...info].js
@@ -1,3 +1,5 @@
+const baseUrl = process.env.NEXT_PUBLIC_BASE_URL || "http://localhost:3000";
+
import Layout from "../../../components/layout";
// import { data } from "../../../lib/testData";
// import { aniData } from "../../../lib/infoData";
@@ -11,26 +13,30 @@ import Modal from "../../../components/modal";
import { useNotification } from "../../../lib/useNotify";
-import { useSession, signIn, signOut } from "next-auth/react";
+import { signIn, signOut } from "next-auth/react";
+import { getServerSession } from "next-auth/next";
+import { authOptions } from "../../api/auth/[...nextauth]";
+
import AniList from "../../../components/media/aniList";
-import { AnimatePresence, motion as m } from "framer-motion";
-import Navbar from "../../../components/navbar";
import { Navigasi } from "../..";
-export default function Info({ info }) {
- const { data: session, status } = useSession();
+export default function Info({ info, sessions, statusWatch }) {
const title = info.aniData.title.romaji || info.aniData.title.english;
const data = info.aniData;
const fallback = info.epiFallback;
const { Notification: NotificationComponent, show } = useNotification();
- // console.log(session);
-
- const playingEpisode = data.episodes
+ let playingEpisode = data.episodes
.filter((item) => item.id == info.id)
.map((item) => item.number);
+ if (playingEpisode == 0) {
+ playingEpisode = fallback
+ .filter((item) => item.id == info.id)
+ .map((item) => item.number);
+ }
+
const [open, setOpen] = useState(false);
const [aniStatus, setAniStatus] = useState("");
const [aniProgress, setAniProgress] = useState(parseInt(playingEpisode));
@@ -56,12 +62,6 @@ export default function Info({ info }) {
.filter((item) => item.id == info.id)
.map((item) => item.title);
- if (status === "loading") {
- return <p>Loading...</p>;
- }
-
- console.log();
-
return (
<>
<Head>
@@ -78,7 +78,7 @@ export default function Info({ info }) {
<h1 className="text-md font-extrabold font-karla">
Save this Anime to Your List
</h1>
- {!session && (
+ {!sessions && (
<button
className="flex items-center bg-[#3a3a3a] mt-4 rounded-md text-white p-1"
onClick={() => signIn("AniListProvider")}
@@ -91,7 +91,7 @@ export default function Info({ info }) {
</div>
</button>
)}
- {session && (
+ {sessions && (
<>
<form
onSubmit={handleSubmit}
@@ -165,8 +165,9 @@ export default function Info({ info }) {
titles={title}
id={info.id}
progress={parseInt(playingEpisode)}
- session={session}
+ session={sessions}
aniId={parseInt(data.id)}
+ stats={statusWatch}
/>
</div>
<div>
@@ -378,6 +379,8 @@ export default function Info({ info }) {
}
export async function getServerSideProps(context) {
+ const session = await getServerSession(context.req, context.res, authOptions);
+
const { info } = context.query;
if (!info) {
return {
@@ -418,6 +421,43 @@ export async function getServerSideProps(context) {
}
}
+ const playingEpisode = aniData.episodes
+ .filter((item) => item.id == id)
+ .map((item) => item.number);
+
+ const resp = await fetch(`${baseUrl}/api/get-media`, {
+ method: "POST",
+ body: JSON.stringify({
+ username: session?.user.name,
+ }),
+ headers: {
+ "Content-Type": "application/json",
+ },
+ });
+
+ const prog = await resp.json();
+
+ const gat = prog?.lists.map((item) => item.entries);
+ const git = gat?.map((item) =>
+ item.find((item) => item.media.id === parseInt(aniId))
+ );
+ const gut = git?.find((item) => item?.media.id === parseInt(aniId));
+
+ let statusWatch = "CURRENT";
+
+ if (gut?.status === "COMPLETED") {
+ statusWatch = "REPEATING";
+ } else if (
+ gut?.status === "REPEATING" &&
+ gut?.media?.episodes === parseInt(playingEpisode)
+ ) {
+ statusWatch = "COMPLETED";
+ } else if (gut?.status === "REPEATING") {
+ statusWatch = "REPEATING";
+ } else if (aniData.totalEpisodes === parseInt(playingEpisode)) {
+ statusWatch = "COMPLETED";
+ }
+
return {
props: {
info: {
@@ -427,6 +467,8 @@ export async function getServerSideProps(context) {
aniData,
epiFallback,
},
+ sessions: session,
+ statusWatch: statusWatch,
},
};
}